/*
 * adc.c
 *
 *  Created on: 2021年7月23日
 *      Author: Jiarun
 */

#include "adc.h"


uint16 AD_V[Coil_NUM][NM];

/*
函数作用：冒泡排序法
*/
void bubble_sort_int(uint16 a[], int n)
{
    int i, j;
    uint16 temp;
    for (j = 0; j < n - 1; j++)
        for (i = 0; i < n - 1 - j; i++)
        {
            if(a[i] > a[i + 1])
            {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
}




uint16 Read_ADC(ADC_Channel_t channel, uint8 ADC_num)
{
    uint16 ad_valu=0;      //adc采样值
    uint16 ad_valu_buf[NM];
    uint16 ad_sum=0;
    int i;

    for(i=0;i< NM;i++)
    {
        ad_valu_buf[i]=ADC_Read(channel);
    }

    bubble_sort_int(ad_valu_buf, NM);  //冒泡排序

/*******************去掉最大值最小值求中间相的值**************************************/

    for(i = 1; i < NM - 1; i++)
    {
        ad_sum+=ad_valu_buf[i];
    }
    ad_valu = ad_sum / (NM - 2);

/*******************滑动平均滤波**************************************/
    for(i=0;i<NM;i++)         //将每一项往前移动一个位置，最前面的一项舍弃
    {
        AD_V[ADC_num][i] = AD_V[ADC_num][i + 1];
    }

    AD_V[ADC_num][NM-1]=ad_valu;//将最新的数值放在数组最后一位

    ad_sum=0;
    for(i=0;i<NM;i++)             //将滑动平均滤波数组的每一个数求和
    {
        ad_sum += AD_V[ADC_num][i];
    }

    ad_valu=ad_sum / NM;
    ad_sum = 0;

    return ad_valu;
}


uint32 abs_sub(uint32 diff1,uint32 diff2)
{
    uint32 temp;
    if(diff1 > diff2)
    {
        temp = diff1 - diff2;
    }
    else
    {
        temp = diff2 - diff1;
    }
    return temp;
}
